import type { About } from '../../user_center/tab/about'
import type { Announcement } from '../../user_center/tab/announcement'
import type { Feedback } from '../../user_center/tab/feed_back'
import type { Personalization } from '../../user_center/tab/personalization'
import type { UtilitySettings } from '../../user_center/tab/utility_settings'
import type { RESET_TYPES } from '../constants'

/**
 * 用户中心模块接口
 */
export interface IUserCenterModule {
  name: string // 模块名称
  generateHTML: () => string // 生成 HTML
  handleConfirm?: () => void | Promise<void> // 处理确认逻辑
  handleOpen?: () => void | Promise<void> // 处理组件打开时的逻辑
  styles: () => string // 样式
  destroy: () => void
}
/**
 * 组件接口
 */
export interface IUserComponent {
  announcement: Announcement
  utilitySettings: UtilitySettings
  personalization: Personalization
  feedback: Feedback
  about: About
}

/**
 * 表单按钮行为类型
 */
export type FormButtonBehavior = 'save' | 'apply'
/**
 * 核心按钮行为类型（基础+表单）
 */
export type CoreButtonBehavior = 'open' | 'refresh' | FormButtonBehavior
/**
 * 全部按钮行为类型（包含特殊行为）
 */
export type AllButtonBehavior = CoreButtonBehavior | 'hide'

/**
 * 按钮文本配置接口
 */
export interface ButtonTextConfig {
  normal: string
  success: string
  failed: string
  loading?: string
  invalid?: string
}

/**
 * 按钮行为类型定义
 */
export interface ButtonProps {
  // 基础行为类型
  type: AllButtonBehavior
  // 权限控制
  requiresAuth?: boolean
  // 状态管理
  isLoading?: boolean
  // 有效性验证
  valid?: boolean
  timeout?: number
}

/**
 * 按钮UI状态
 */
export interface ButtonState {
  element: JQuery<HTMLElement>
  props: ButtonProps
  timer?: number
}

/**
 * 标签页配置接口
 */
export interface ITabConfig {
  id: string
  name: string
  icon: string
  component: keyof IUserComponent
  buttonBehavior: AllButtonBehavior
  openUrl?: string
  saveHandler?: () => Promise<void>
  applyHandler?: () => Promise<any>
}

export type ResetType = typeof RESET_TYPES[keyof typeof RESET_TYPES]

/**
 * 功能生效类型
 */
export enum EffectType {
  INACTIVE = 'inactive', // 未启用
  IMMEDIATE = 'immediate', // 立即生效
  REFRESH = 'refresh', // 刷新生效
  MIXED = 'mixed', // 开启立即/关闭刷新
  GUEST = 'guest', // 访客生效
}

/**
 * 功能生效状态
 */
export enum EffectState {
  ENABLED = 'enabled', // 功能开启状态
  DISABLED = 'disabled', // 功能关闭状态
}

/**
 * 功能样式配置
 */
export interface EffectStyleConfig {
  className: string
  bgColor: string
  textColor: string
  label: string
}
